# Vistas de la aplicacion
from django.http import HttpResponse
from django.template import *
# -*- coding: utf-8 -*-
from django.shortcuts import get_object_or_404, render_to_response
from corremosapp.models import *
from corremosapp.valicaciones_util import *
from google.appengine.ext import db
from appengine_django.sessions.models import Session
from django.http import HttpResponseRedirect
import time
import logging
#Importamos nuestro decorator
from corremosapp.decorators import requiere_usuario

def inicio(request):
    return render_to_response('index.html', {})

#Metodo que calcula el ritmo del usuario en
#minutos por kilometros
def calcular(request):
    #Obtenemos el formulario de la request
    form = CalculoForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        errores = []
        if cd['horas'] == None:
            logging.error('horas es none')
            errores.append('El campo horas no puede ir vacio')
        logging.error('despues de hacer el apend..')
        errores = validaFormCalcular(cd['horas'],cd['minutos'],cd['segundos'],cd['distancia'])
        if len(errores) > 0:
            logging.error('----')
            logging.error(len(errores))
            return render_to_response('errorCalculo.html', {'errores': errores })
        time.sleep(1)
        totalSegundos = cd['horas']*3600 + cd['minutos'] * 60 + cd['segundos']
        segundosPorKilometro = (totalSegundos*1000)/float(cd['distancia'])
        kilometrosEnUnMinuto = float(segundosPorKilometro/60)
        min = int(kilometrosEnUnMinuto // 1)
        seg = int((kilometrosEnUnMinuto - min)*60)
        return render_to_response('resultadoCalculo.html', {'min': min, 'seg' : seg })
    else:
        return render_to_response('error.html')
    
#metodo que realiza el registro del usuario, cuando llegan los
#datos ya estan validados por javascript
def registro(request):
    logging.error('llega al metodo')
    form = RegistroForm(request.POST)
    if form.is_valid():
        logging.error('el formulario es...correcto, parece')
        cd = form.cleaned_data
        logging.error('el formulario es valido')
        usuarioInsertar = Usuario(
                            email=cd['correo'],
                            password=cd['contras'],
                            nombre=cd['nombre'],
                            apellidos=cd['apellidos'],
                            provincia=cd['provincia'],
                            localidad=cd['localidad'])
        logging.error('depsues de crear el objeto usuario')
        db.put(usuarioInsertar)
        return render_to_response('registroRealizado.html')
#    else:
#        logging.error('el formulario no es valido')
#        return render_to_response('errorRegistro.html')
    
#Metodo que llama al formulario de registro del usuario
def irRegistro(request):
    time.sleep(1)
    return render_to_response('registro.html')

#Realiza el login del usurio
#Debera meter el usuario en sesion
def login(request):
    form = LoginForm(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        logging.error('el formulari llega')
        query = Usuario.all()
        query.filter('email =', cd['email'])
        resultados = query.fetch(1)
        if resultados != None and len(resultados) == 1:
            #El usuario existe, ahora hay que comprobar
            usr = resultados[0]
            if(usr.password == cd['passw']):
                request.session['usuario'] = resultados[0]
                return render_to_response('paginaUsuario.html')
            else:
                return render_to_response('pass_incorrecto.html')
        else:
            return render_to_response('loginMal.html')
        return render_to_response('paginaUsuario.html')
    else:
        return render_to_response('error.html')
    
    

###############################################################
# Usuarios
###############################################################
#REDIRECCIONES
#para entrar aqui, es necesario estar autenticado, por eso usamos
#nuestro decorator

@requiere_usuario
def irInicio(request):
    time.sleep(1)
    return render_to_response('inicioUsuario.html')

@requiere_usuario
def irIntroducirDatos(request):
    time.sleep(1)
    return render_to_response('usuIntroducirDatos.html')

@requiere_usuario
def misEstadisticas(request):
    time.sleep(1)
    #Calculamos todos los recorridos del usuario
    usr = request.session['usuario']
    query = Recurrido.all()
    query.order('-fecha')
    query.filter('usuario =', usr)
    resultados = query.fetch(1000)
    return render_to_response('misEstadisticas.html', {'resultados': resultados })

@requiere_usuario
def irBuzon(request):
    time.sleep(1)
    return render_to_response('buzon.html')

@requiere_usuario
def salir(request):
    time.sleep(1)
    #Borramos de la sesion el usuario
    del request.session['usuario']
    return HttpResponseRedirect('/')

#ACCIONES DE LOS USUARIOS

#Introducir una carrera
@requiere_usuario
def introducirDatosCarrera(request):
    form = CarreraForm(request.POST)
    if form.is_valid():
        logging.error('el fr es valido')
        cd = form.cleaned_data
        time.sleep(0.5)
        user = request.session['usuario']
        logging.error('-------> antes de hacer la suma')
        logging.error(cd['horas'])
        totalSegundos = cd['horas']*3600 + cd['minutos'] * 60 + cd['segundos']
        logging.error('- despues de hacer la suma')
        logging.error(totalSegundos)
        logging.error('distancia')
        logging.error(cd['distancia'])
        carreraInsertar = Recurrido(
                            segundos=totalSegundos,
                            metros=cd['distancia'],
                            fecha=cd['fecha'],
                            usuario=user)
        logging.error('depsues de crear el objeto usuario')
        db.put(carreraInsertar)
        return render_to_response('datos_introducidos.html')
    else:
        return render_to_response('error.html')
